package chapter02

/**
 * Created with IntelliJ IDEA.
 * ClassName: Test08_DateTypeConversion
 * Package: chapter02
 * Description:
 * User: fzykd
 *
 * @Author: LQH
 *          Date: 2023-06-17
 *          Time: 16:49
 */

object Test08_DateTypeConversion {

  def main(args: Array[String]): Unit = {
    //1.自动提升原则：有多种类型的数据混合运算时，系统首先自动将所有数据转换成
    //精度大的那种数据类型，然后再进行计算
    val a1: Byte = 10
    val b1: Long = 2334
    val result: Long = (a1 + b1) //不同精度做运算 以高精度为准
    //执意要返回Int 强制类型转换
    val result2: Int = a1 + b1.toInt

    //2.把精度大的数值类型赋值给精度小的数值类型时，就会报错，反之就会进行自动
    //类型转换
    val a2:Byte = 10
    val b2:Int = a2
    //不能从低到高 强转才可以
    //val c2:Byte = b2

    //3.（byte，short）和 char 之间不会相互自动转换
    val a3:Byte = 10
    val b3:Char = 'b'
    //val c3:Byte = b3  //IDEA没报错 但是是错的 之间是不能相互转换的

    //4.byte，short，char 他们三者可以计算，在计算时首先转换为 int 类型
    val a4:Byte = 12
    val b4:Short = 25
    val c4:Char = 'c'  //用的ASCII 相加
    val result4:Int = a4 + b4 + c4 //运算的话是要Int才行
    println(result4)



    //强制类型转换
    //1.将数据由高精度转换为低精度，就需强制类型转换
    val n1:Int = 2.5.toInt
    println(n1)  //2 直接取整数部分 不是四舍五入
    //2.强转只针对最后操作数有效 往往会使用小括号提升优先级
    val n2:Int = (2.6 + 3.7).toInt
    println(n2) // 6

    //3.数值类型 和 String类型转换
    //1.数值 -> String
    val n:Int = 27
    val s:String = n + "" //直接加一个空的 "" 就变成了String
    println(s)

    //2.String -> 数值
    val m:Int = "12".toInt
    val f:Float = "12.3".toFloat
    //不能一步到位
    val f2:Int = "123.23".toDouble.toInt


  }

}
